import Vue from 'vue'
import App from './App'
import router from './router';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-default/index.css';
import '@/assets/font/iconfont.css';
import '@/assets/css/base.css';
import store from './store/index';
import axios from 'axios';

// 添加全局axios配置
// 设置基本URL为后端API地址
axios.defaults.baseURL = 'http://localhost:5000'
// 添加默认请求头，禁用缓存
axios.defaults.headers.common['Content-Type'] = 'application/json'
axios.defaults.headers.common['Accept'] = 'application/json'
axios.defaults.headers.common['Cache-Control'] = 'no-cache, no-store, must-revalidate'
axios.defaults.headers.common['Pragma'] = 'no-cache'
axios.defaults.headers.common['Expires'] = '0'
// 设置默认超时
axios.defaults.timeout = 15000 // 15秒，延长超时时间
// 允许跨域请求携带cookie - 注释掉此设置
// axios.defaults.withCredentials = true

// 请求拦截器
axios.interceptors.request.use(config => {
	const token = localStorage.getItem('token');
	if (token) {
		config.headers.Authorization = token;
	}
	// 添加时间戳和随机数参数，确保不使用缓存
	if (config.method === 'get') {
		config.params = config.params || {}
		config.params._t = new Date().getTime()
		config.params._r = Math.random()
	}
	
	// 为OPTIONS请求特别处理
	if (config.method === 'options') {
		config.headers = {
			'Access-Control-Request-Method': 'GET, POST, PUT, DELETE',
			'Access-Control-Request-Headers': 'Content-Type, Authorization, Cache-Control'
		}
	}
	
	return config;
}, error => {
	// 请求错误处理
	console.error('请求拦截器错误:', error)
	return Promise.reject(error);
});

// 响应拦截器
axios.interceptors.response.use(response => {
	return response;
}, error => {
	if (error.response) {
		switch (error.response.status) {
			case 401:
				// token 过期或无效，清除 token 并跳转到登录页
				localStorage.removeItem('token');
				router.push('/login');
				break;
			case 403:
				// 权限不足
				ElementUI.Message.error('权限不足');
				break;
			case 404:
				// 资源不存在
				ElementUI.Message.error('请求的资源不存在');
				break;
			case 500:
				// 服务器错误
				ElementUI.Message.error('服务器错误');
				break;
			default:
				ElementUI.Message.error(error.response.data.message || '请求失败');
		}
	} else {
		ElementUI.Message.error('网络错误，请检查网络连接');
	}
	return Promise.reject(error);
});

Vue.use(ElementUI);
Vue.prototype.$axios = axios;

Vue.config.productionTip = false

new Vue({
	el: '#app',
	store,
	router,
	render: h => h(App)
	//template: '<App/>',
	//components: { App }
})
